home *** CD-ROM | disk | FTP | other *** search
- unit PrinterSettingsU;
-
- {$ifdef Ver90} { Delphi 2.0x }
- {$define DelphiLessThan3}
- {$endif}
- {$ifdef Ver93} { C++ Builder 1.0x }
- {$define DelphiLessThan3}
- {$endif}
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- btnLocalSettings: TButton;
- dlgSettings: TPrinterSetupDialog;
- rgLocalOrientation: TRadioGroup;
- btnGlobalSettings: TButton;
- procedure btnLocalSettingsClick(Sender: TObject);
- procedure rgLocalOrientationClick(Sender: TObject);
- procedure btnGlobalSettingsClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- uses
- Printers, WinSpool;
-
- {$ifdef DelphiLessThan3}
- type
- EWin32Error = class(Exception);
-
- function Win32Check(RetVal: BOOL): BOOL;
- begin
- if not RetVal then
- raise EWin32Error.Create(SysErrorMessage(GetLastError));
- Result := RetVal;
- end;
- {$endif}
-
- procedure TForm1.btnLocalSettingsClick(Sender: TObject);
- begin
- dlgSettings.Execute
- end;
-
- procedure TForm1.rgLocalOrientationClick(Sender: TObject);
- var
- Device, Driver, Port: array[0..255] of Char;
- DevModeHdl: THandle;
- DevModePtr: PDevMode;
- begin
- Printer.GetPrinter(Device, Driver, Port, DevModeHdl);
- if DevModeHdl <> 0 then
- begin
- DevModePtr := GlobalLock(DevModeHdl);
- if Assigned(DevModePtr) then
- try
- if DevModePtr^.dmFields and dm_Orientation = 0 then
- raise EPrinter.Create('Custom paper orientations not supported');
- case (Sender as TRadioGroup).ItemIndex of
- 0: DevModePtr^.dmOrientation := DMORIENT_PORTRAIT;
- 1: DevModePtr^.dmOrientation := DMORIENT_LANDSCAPE;
- end
- finally
- GlobalUnlock(DevModeHdl)
- end;
- Printer.SetPrinter(Device, Driver, Port, DevModeHdl);
- end
- end;
-
- procedure TForm1.btnGlobalSettingsClick(Sender: TObject);
- var
- Device, Driver, Port: array[0..255] of Char;
- DevModeHdl, PrinterHandle: THandle;
- begin
- //Get printer device name
- Printer.GetPrinter(Device, Driver, Port, DevModeHdl);
- //Get printer handle
- Win32Check(OpenPrinter(Device, PrinterHandle, nil));
- try
- //Invoke the printer property sheet
- Win32Check(PrinterProperties(Handle, PrinterHandle));
- finally
- //Close the opened handle
- ClosePrinter(PrinterHandle)
- end;
- end;
-
- end.
-